package com.ly.java.basic;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 这类在运行时会被读到内存，除了此类之外还有哪些类会被读到内存。第一个被读到内存的类是谁？
 * 通过配置JVM参数实现 -XX:+TranceClassLoading
 */
public class HelloWorld {
    /**
     * 访问main方法中的参数用途是什么？我们可以给它们传值吗？加入IDEA在哪里传值？
     * 程序在运行过程中我想了解GC情况？有没有触发GC加入触发了GC？对哪些内存区域进行了回收？
     * JVM参数：-XX:+PrintGCDetails（打印GC详细情况）
     * @param args
     * Spring管理bean优势：
     * （1）
     * （2）
     * （3）降低代码的耦合
     */
    public static void main(String[] args) {
        System.out.println(Arrays.toString(args));
        System.out.println("Hello JAVA!");
        //触发GC的条件
        //（1）手动GC
        //System.gc();
        //（2）自动GC
        //List<byte[]> list=new ArrayList<>();heap堆内存溢出
        for (int i = 0; i < 10000; i++) {
            byte[] array=new byte[1024*1024];//对象创建越来越多的时候会启动GC
            //内存中的对象何时会被认为是垃圾对象？对象不可达时（JVM访问不到了）

        }
        //思考：系统在启动GC时要回收内存中的垃圾对象，此时还可能会导致短时间的程序暂停
    }
}
